MDNのドキュメント翻訳の校正のためにmdn-textlint-jaを使ってみた。Neovimでも動かしてみた
どうも。CX事業本部Delivery部のえーたん(@eetann092)です。
先日、MDN Web Docsに翻訳コントリビュートした時の備忘録として記事を書きました。
Pull Requestのレビューでは、表記ルールの統一などのご指摘をいただきました。 同じようなミスを減らすために自分でtextlintのルールを設定しようかと考えていた所、mdn-textlint-jaを知りました。
本記事では、「mdn-textlint-jaの使い方」と「Neovimで使いやすくするために設定した内容」を紹介します。
↓2023年1月19日追記
以前はmongolyyさんのリポジトリmongolyy/mdn-textlint-jaにありましたが、Mozillaコミュニティのリポジトリmozilla-japan/translationに移動しました。本記事のリンク・設定も合わせて更新しております。
mdn-textlint-jaとは?
mdn-textlint-jaはtextlintのルール集です。MDNのドキュメント翻訳時の校正で使えるような表記ルールが追加されています。
たとえば、以下のような文章があったとします。
Kerryはコンピュータを触りました。 ゴロウはフィルタを確認しています。 Johnnyはプライバシーを尊重します。
この文章に対してmdn-textlint-jaを走らせると、以下のようにエラーが表示されます。
Editorial Guidelineに掲載されている「日本語と英数字の間には半角スペースを挿入する」「コンピュータではなくコンピューター」のようなルールを教えてくれます。
目視では見落としがちな部分を確認できるため便利です。
使い方
READMEに書かれています。
リポジトリをcloneし、ディレクトリMDN/textlint
に移動後、yarn
を実行すれば準備は終わりです。
あとはyarn run lint ファイルパス
で前述の画像のようにtextlintをmdn-textlint-jaのルールを使って動かせます。
Neovimで表示する
Neovimで翻訳するMarkdownファイルを開いたら、LSPのdiagnosticsとして表示されるように設定してみました。
null-ls.nvimを導入すればtextlint自体はLSPとして動きます。ただし、今回は「textlint対象となるリポジトリ(translated-content)」と「textlintを動かすためのディレクトリ(mdn-textlint-ja)」が別々の場所にあります。
そのため、cwd
オプションを使ってカレントディレクトリの場所を変えることでmdn-textlint-jaを使えるようにしました。
筆者の2023年1月19日時点での設定を紹介します。シンタックスハイライト付きで見たい方は筆者のdotfilesをどうぞ。
null_ls.builtins.diagnostics.textlint.with({ filetypes = { "markdown" }, condition = function(utils) local is_mdn = utils.root_matches("translated%-content") local is_not_dotfiles = not utils.root_matches("dotfiles") return is_mdn or ( is_not_dotfiles and utils.root_has_file({ ".textlintrc", ".textlintrc.js", ".textlintrc.json", ".textlintrc.yml", ".textlintrc.yaml", }) ) end, cwd = function(params) local is_mdn = params.root:find("translated%-content") return is_mdn and vim.fn.expand("~/ghq/github.com/mozilla-japan/translation/MDN/textlint") end, }),
まず、textlintをnull-ls.nvim経由で起動させるかどうかをcondition
で設定しました。
condition = function(utils) local is_mdn = utils.root_matches("translated%-content")
ディレクトリを判別するためにcondition
ではutils.root_matches
、cwd
ではparams.root:find
を使いました。どちらの引数も正規表現で指定します。
ここで1つ注意です。Luaの正規表現では、-
は*
のように「直前の項目の0回以上の繰り返し」を意味します。そのため、前に%
を付けてエスケープしました。
次に、cwd
で返す値の説明です。
return is_mdn and vim.fn.expand("~/ghq/github.com/mozilla-japan/translation/MDN/textlint")
cwd
で返す値は2通り設定しました。
まず、ディレクトリ名にtranslated-content
含まない時にnil
を返すパターンです。cwd
でnil
を返すとカレントディレクトリがプロジェクトのルートディレクトリに設定されます。
もう一方は、ディレクトリ名にtranslated-content
を含む時にmdn-textlint-ja
のパスを返すパターンです。
最後に
mdn-textlint-jaの使い方とNeovimで使いやすくするための設定を紹介しました。
ちなみに、筆者は翻訳コントリビュート対応中に実際にmdn-textlint-jaを使っており、ルールを追加するPRを投げてマージしていただきました。
参考